package com.wqm.cn.dao;

import java.util.List;

public interface IDAO<K, V> {
    /**
     * 数据增加操作
     *
     * @param vo 包含数据的VO对象
     * @return 如果增加成功返回true，否则返回false
     * @throws Exception 如果数据库没有打开，或者执行的增加有错误会抛出
     */
    public boolean doCreate(V vo) throws Exception;

    /**
     * 数据更新操作
     *
     * @param vo 要更新的数据对象
     * @return 如果更新成功返回true，否则返回false
     * @throws Exception 如果数据库没有打开，或者执行的更新有错误，或者数据不存在会抛出
     */
    public boolean doUpdate(V vo) throws Exception;

    /**
     * 根据数据的编号删除数据操作
     *
     * @param id 要删除数据的主键
     * @return 如果删除成功返回true，否则返回false
     * @throws Exception 如果数据库没有打开，或者执行的删除有错误，或者数据不存在会抛出，或者数据不存在
     */
    public boolean doRemove(K id) throws Exception;

    /**
     * 根据主键查询信息
     *
     * @param id 要查询的数据主键
     * @return 如果返回的对象不为null，表示已经查找到数据。<br>
     * 如果为null则表示此条数据不存在
     * @throws Exception 如果数据库没有打开，或者查询错误会抛出异常
     */
    public V findById(K id) throws Exception;

    /**
     * 查询全部数据
     *
     * @return 如果存在数据，则将所有数据以List集合的方式返回，如果没有数据，则List集合的长度size()为0
     * @throws Exception 如果数据库没有打开，或者查询错误会抛出异常
     */
    public List<V> findAll() throws Exception;

    /**
     * 分页（模糊）查询数据表的全部数据记录
     *
     * @param column      模糊查询的数据列
     * @param keyWord     模糊查询的关键字，如果关键字为空字符串（isEmpty()=true），表示查询全部
     * @param currentPage 当前所在的页，不能小于1
     * @param lineSize    每页要显示的数据长度
     * @return 如果存在数据，则将所有数据以List集合的方式返回，如果没有数据，则List集合的长度size()为0
     * @throws Exception 如果数据库没有打开，或者查询错误会抛出异常
     */
    public List<V> findAll(String column, String keyWord, int currentPage,
                           int lineSize) throws Exception;

    /**
     * 统计（模糊）查询的数据的个数，使用COUNT()函数完成
     *
     * @param column  模糊查询的数据列
     * @param keyWord 模糊查询的关键字，如果关键字为空字符串（isEmpty()=true），表示查询全部
     * @return 返回数据的个数，如果表中没有数据，也会返回0
     * @throws Exception 如果数据库没有打开，或者查询错误会抛出异常
     */
    public int getAllCount(String column, String keyWord) throws Exception;
}
